package com.hh.admin.controller;


import java.util.List;

import javax.validation.Valid;

import org.hibernate.validator.constraints.NotBlank;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.hh.admin.entity.SysGroup;
import com.hh.admin.exception.ValidEntityException;
import com.hh.admin.service.ISysGroupService;
import com.hh.admin.view.SysGroupView;
import com.hh.core.annotion.OperationLog;
import com.hh.core.common.BaseController;
import com.hh.core.entity.ResultEntity;
import com.hh.core.entity.ZtreeEntity;
import com.hh.core.enums.OperationLogEnum;
import com.hh.core.log.LogTempObject;

/**
 * <p>
 *  组织机构控制器
 * </p>
 *
 * @author hxn
 * @since 2018-01-16
 */
@Controller
@RequestMapping("/admin/sysGroup")
public class SysGroupController extends BaseController{
	
	@Autowired
	ISysGroupService sysGroupService;
	
	/**
	 * 
	* @Title: group  
	* @Description:   组织结构主页
	* @param @param model
	* @param @return    设定文件  
	* @return String    返回类型  
	* @author hxn
	* @date 2018年2月2日 上午10:15:29  
	* @throws
	 */
	@RequestMapping(value = "", method = RequestMethod.GET)
	public String group(Model model) {
		return SysGroupView.GROUP;
	}
	
	/**
	 * 
	* @Title: groupList  
	* @Description:   组织结构列表
	* @param @return    设定文件  
	* @return List<SysGroup>    返回类型  
	* @author hxn
	* @date 2018年2月2日 上午10:15:41  
	* @throws
	 */
	@RequestMapping(value = "/list")
	@ResponseBody
	public List<SysGroup> groupList(SysGroup group){
		EntityWrapper<SysGroup> entityWrapper = new EntityWrapper<>();
		entityWrapper.like("GROUP_NAME",group.getGroupName());
		return sysGroupService.selectList(entityWrapper);
	}
	
	/**
	 * 
	* @Title: groupAdd  
	* @Description:   组织结构添加页面
	* @param @param model
	* @param @return    设定文件  
	* @return String    返回类型  
	* @author hxn
	* @date 2018年2月2日 上午10:15:51  
	* @throws
	 */
	@RequestMapping(value = "/add", method = RequestMethod.GET)
	public String groupAdd(Model model){
		model.addAttribute("action", "add");
		return SysGroupView.GROUP_DETAIL;
	}
	
	/**
	 * 
	* @Title: addGroup  
	* @Description:   组织结构添加
	* @param @param group
	* @param @param result
	* @param @return    设定文件  
	* @return ResultEntity    返回类型  
	* @author hxn
	* @date 2018年2月2日 上午10:16:01  
	* @throws
	 */
	@RequestMapping(value = "/add", method = RequestMethod.POST)
	@ResponseBody
	@OperationLog(value="添加组织机构",type=OperationLogEnum.ADD)
	public ResultEntity addGroup(@Valid SysGroup group,BindingResult result){
		if(result.hasErrors()){
			throw new ValidEntityException();
		}
		sysGroupService.insert(group);
		return successResult("添加成功!");
	}
	
	/**
	 * 
	* @Title: groupEdit  
	* @Description:   组织结构修改页面
	* @param @param id
	* @param @param model
	* @param @return    设定文件  
	* @return String    返回类型  
	* @author hxn
	* @date 2018年2月2日 上午10:16:10  
	* @throws
	 */
	@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
	public String groupEdit(@PathVariable Long id,Model model){
		SysGroup group = sysGroupService.selectById(id);
		model.addAttribute("group", group);
		model.addAttribute("action", "edit");
		
		LogTempObject.me().setObject(group);
		return SysGroupView.GROUP_DETAIL;
	}
	
	/**
	 * 
	* @Title: editGroup  
	* @Description:   组织结构修改
	* @param @param group
	* @param @param result
	* @param @return    设定文件  
	* @return ResultEntity    返回类型  
	* @author hxn
	* @date 2018年2月2日 上午10:16:19  
	* @throws
	 */
	@RequestMapping(value = "/edit", method = RequestMethod.POST)
	@ResponseBody
	@OperationLog(value="修改组织机构",type=OperationLogEnum.EDIT)
	public ResultEntity editGroup(@Valid SysGroup group,BindingResult result){
		if(result.hasErrors()){
			throw new ValidEntityException();
		}
		sysGroupService.updateById(group);
		return successResult("修改成功!");
	}
	
	/**
	 * 
	* @Title: deketeGroup  
	* @Description:   删除组织结构
	* @param @param id
	* @param @return    设定文件  
	* @return ResultEntity    返回类型  
	* @author hxn
	* @date 2018年2月2日 上午10:16:28  
	* @throws
	 */
	@RequestMapping(value = "/delete", method = RequestMethod.POST)
	@ResponseBody
	@OperationLog(value="删除组织机构",type=OperationLogEnum.DELETE)
	public ResultEntity deleteGroup(@NotBlank(message = "ID不能为空")Long id){
		sysGroupService.deleteById(id);
		return successResult("删除成功!");
	}
	
	/**
	 * 
	* @Title: ztreeList  
	* @Description:   组织结构树
	* @param @return    设定文件  
	* @return List<ZtreeEntity>    返回类型  
	* @author hxn
	* @date 2018年2月2日 上午11:21:28  
	* @throws
	 */
	@RequestMapping(value = "/ztreeList", method = RequestMethod.POST)
	@ResponseBody
	public List<ZtreeEntity> ztreeList(){
		List<ZtreeEntity> ztreeList = sysGroupService.getGroupTreeList();
		ztreeList.add(ZtreeEntity.getTopNode("地球"));
		return ztreeList;
	}
}
